//
//  LLRouter.h
//  LLFoundation
//
//  Created by my_liu on 2016/11/14.
//  Copyright © 2016年 . All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

#define kLLUITransitionStyle @"LLUITransitionStyle"

typedef NS_ENUM(NSInteger, LLUITransitionStyle) {
    LLUITransitionStylePush = 0,//push到注册的class
    LLUITransitionStylePresent,//present到注册的class
    LLUITransitionStyleAutoReuse,//复用nav堆栈中注册的class(相当于popto)，如果没有就忽略.
    LLUITransitionStyleAutoReusePush,//如果nav堆栈中有注册的class就复用(popto)，如果没有就push.
    
};
/*
 例如：如果想pop到root再push到user路径为：root?LLUITransitionStyle=2@user?LLUITransitionStyle=0
 如果想pop到root再present到user路径为：root?LLUITransitionStyle=2@user?LLUITransitionStyle=1
 如果想present到user再push到user路径为：user?LLUITransitionStyle=1@user?LLUITransitionStyle=0
 以此类推。。。
 */
@interface LLRouterOptions : NSObject

@property (readwrite, nonatomic, strong) Class openClass;

@property (nonatomic, strong) NSArray * openParams;

@property (nonatomic, assign) LLUITransitionStyle transitionStyle;

@property (nonatomic, strong) id protocol;

@end

@interface LLRouter : NSObject

+ (instancetype)shareInstance;
/**
 *  创建openurl
 *
 *  @param route      注册的路径
 *  @param style      跳转的方式（push，pop，present）
 *  @param openParams 需要传的参数(协议实例方法中用到，例如initWithUserId:other:参数要按顺序添加，参数不能为数组、字典等集合数据类型)
 *
 *  @return openurl
 */
- (NSString *)createOpenUrlWithRoute:(NSString *)route transitionStyle:(LLUITransitionStyle)style openParams:(NSArray *)openParams;

/**
 *  为controller的class注册路径
 *
 *  @param route           注册的路径
 *  @param protocol        objection注册的协议
 */
- (void)map:(NSString *)route toProtocol:(id)protocol;


/**
 *  根据路径跳转到相应controller
 *
 *  @param url                  跳转路径，支持一次跳转一组controller
 （两种情况：
 例1:“user?LLUITransitionStyle=0&userId=3@userdetial?LLUITransitionStyle=0&userId=2”。
 注册路径分别为“user”和“userdetial”
 多个controller的url由“@”符号分隔。
 每个controller的url中“？”分隔controller的注册路径和参数。
 “？”之前为controller注册路径，“？”之后为所带参数。
 参数以”&“分隔。
 根据LLUITransitionStyle的值来判断是push、present、pop，不传默认为push。
 
 例2:“cugc://user?LLUITransitionStyle=0&userId=3@userdetial?LLUITransitionStyle=0&userId=2”
 “cugc://”注册路径前缀（注册路径分别为“cugc://user”和“cugc://userdetial”）
 其他同上
 )
 
 *  @param navigationController 当前navigationController
 *  @param animated             是否有动画效果
 */
- (void)open:(NSString *)url withCurrentNavigationcontroller:(UINavigationController *)navigationController animated:(BOOL)animated;


/**
 *  pop controller,如果是push出来的就pop，如果是present就dismiss
 *
 *  @param navigationController 当前navigationController
 *  @param animated             是否有动画效果
 */
- (void)popWithCurrentNavigationcontroller:(UINavigationController *)navigationController animated:(BOOL)animated;

@end
